#-*- coding: utf-8 -*-
#@File    : handle_excel_V2.py
#@Time    : 2022/8/7 11:07
#@Author  : xintian
#@Email   : 1730588479@qq.com
#@Software: PyCharm
#Date:2022/8/7
#TODO:time-20220808，task-讲4个版本excel数据获取！
#目标：作为测试测试人员，非常缺乏一个编程思路，代码优化或者迭代的概念！
#编程理念：先实现，后优化!
pass
"""
版本:v3.0
优化需求：
    - 1.目前版本里获取的列数据是固定的，不能根据需求去变更，除非改代码
预期：
    用户想获取那一列就可以获取那一列。多列也可以一起获取！
解决方案：
    - 在函数定义的地方，可以加参数
    - 参数怎么设计问题：
        - 获取的列数不定  *args
    - 用户传递什么数据进来：
        - 1.直接传列编号  5,7,8,9 
            =特点： 
                1.函数使用的时候特别方便，work_sheet.cell(x,y).value
                2.可读性不好      
        - 2.传递表头 ：请求数据 ，用例描述
            =特点：
                1.代码可读性可以
                2.work_sheet.cell(x,y).value不能直接使用，需要转化
"""
#xlutils  写入excel文件 worksheet.write(行号，列号，内容)
import  xlrd# pip install xlrd#   panda  openpyxl
import json
def get_excel_data(file_path,sheet_name,case_name,*args):
    #1.打开文件-从文件路径读取到内存
    #formatting_info=True 保证excel文件原样式
    work_book = xlrd.open_workbook(file_path,formatting_info=True)
    #print(work_book.sheet_names())#获取所有的表名
    #2.获取sheet对象
    work_sheet = work_book.sheet_by_name(sheet_name)

    # #扩展1：获取一行数据
    # print(work_sheet.row_values(0))
    # #扩展2：获取一列数据
    # print(work_sheet.col_values(0))
    # #扩展3：获取单元格数据 坐标（行编号，列编号）
    # print(work_sheet.cell(0,0).value)

    #----------------处理用户获取列数据----------
    #arg == ('请求数据'，‘预期的响应结果’)--转换成--index 列编号
    col_indexs = []#表头数据
    for one in args:
        #列表的元素的下标怎么求  列表.index(元素)
        #[7,9]
        col_indexs.append(work_sheet.row_values(0).index(one))#0行数据--列表  7


    print('用户输入的表头对应的列编号是>>>',col_indexs)
    #3.获取对应的数据
    row_index = 0#初始行编号
    res_data = []#结果返回数据
    for one in work_sheet.col_values(0):#根据第0列数据的个数进行遍历次数
        if case_name in one:# 'Login' in ‘Login001’
            col_data = []#一行所有需要获取的列数据
            for col in col_indexs:#[,5,7,9]
                tmp = is_json(work_sheet.cell(row_index,col).value)#i请求数据
                col_data.append(tmp)

            # [(请求数据1，响应数据1),(请求数据2，响应数据2)]
            res_data.append(tuple(col_data))
        row_index += 1#下一行
    return res_data

#-------------------判断是否是json格式的函数----------
#如果是json--返回字典给我，不是json  直接原样返回
def is_json(in_str):
    try:
        return json.loads(in_str)#如果转化可以成功，说明就是json
    except:
        return in_str





#----------------------------------------------


if __name__ == '__main__':
    res = get_excel_data('../data/Delivery_System_V1.5.xls','登录模块','Login','模块','请求方式','请求参数')
    for one in res:
        print(one)

"""
测试反馈：
    - 1.目前的版本是这个接口所有的用例都执行的！
    - 2.pytest框架---它目前只能实现哪一个模块是否运行，哪一个接口是否运行！mark
        - 用例级别的筛选不能实现  ddt
        @pyteest.mark.paramxxxxx('a,b',[(),()])
        
"""